//
//  func_overload.cpp
//  learnC++
//
//  Created by apple on 2018/5/31.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#include "func_overload.hpp"

int add(int x, int y)
{
    return x + y;
}

double add(double x, double y)
{
    return x + y;
}

int add(int x, int y, int z)
{
    return x + y + z;
}

void getRandomValue(int &out){
    out = 3;
}

void getRandomValue(double &out){
    out = 2;
}

void print(char *value){
    std::cout << value << "KKKK\n";
}
void print(int value){
    std::cout << value << "LLLL\n";
}

//1）找到匹配。该调用被解析为特定的重载函数。
//2）找不到匹配。参数不能与任何重载函数相匹配。（报错）
//3）发现模糊的匹配。参数匹配多个重载函数。(报错)
void test_func_overload(){
    
    int x = add(1, 2);
    
    int y = add(1, 2, 3);
    
    double z = add(1.0, 2.2);
    
    std::cout << "x = " << x << " y = " << y << " z = " << z << "\n";
 
    
    getRandomValue(x);
    getRandomValue(z);
    
    
    print(0);//完全匹配void print(int value) 可以匹配void print(char *value)
    
    print(3.0);//匹配void print(int value)
}


